home *** CD-ROM | disk | FTP | other *** search
- #pragma once
-
- #ifndef __TRANSACTIONSUITE__
- #define __TRANSACTIONSUITE__
-
- class TAEvent;
- class TAETransaction;
- class TTransaction;
- class TEventHandlerTable;
-
- #include "ListTemplate.h"
-
- #define kTransactionNotRequired false
-
- enum AETransactionType
- {
- kNoSuchTransaction = 0,
- kSingleEventTransaction,
- kMultiEventTransaction
- };
-
- class TTransactionRecord
- {
- public:
- TTransactionRecord() :
- fTransaction(nil),
- fTransactionID(0),
- fTransactionType(kNoSuchTransaction) {}
- TTransactionRecord(TTransaction* t, long transactionID, AETransactionType transactionType) :
- fTransaction(t),
- fTransactionID(transactionID),
- fTransactionType(transactionType) {}
- TTransactionRecord(const TTransactionRecord* transactionRecord) :
- fTransaction(transactionRecord->Transaction()),
- fTransactionID(transactionRecord->TransactionID()),
- fTransactionType(transactionRecord->TransactionType()) {}
-
- TTransaction* Transaction() const { return fTransaction; }
- long TransactionID() const { return fTransactionID; }
- AETransactionType TransactionType() const { return fTransactionType; }
-
- private:
- long fTransactionID;
- TTransaction* fTransaction;
- AETransactionType fTransactionType;
- };
-
- class TTransactionList
- {
- public:
- void AddTransaction(TTransaction* t, long transactionID, AETransactionType transactionType);
- TTransaction* FindTransaction(long transactionID) const;
- void RemoveTransaction(TTransaction* transaction);
- AETransactionType TransactionType(TTransaction* t) const;
-
- private:
- AListOf<TTransactionRecord> fTransactionList;
- };
-
-
- class TTransactionSuite
- {
- public:
- static void InstallAEHandlers(TEventHandlerTable&);
-
- // event handlers
-
- protected:
-
- static pascal OSErr BeginTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
- static pascal OSErr EndTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
- static pascal OSErr TerminateTransaction(TAEvent& ae, TAEvent& reply, long hRefcon);
-
- // transaction control
-
- public:
-
- static void BeginEventTransaction(TAETransaction& t, Boolean transactionAlwaysNeeded = true);
- static void EndEventTransaction(TAETransaction& t) { EndEventTransaction(t, false); }
- static void TerminateEventTransaction(TAETransaction& t) { TerminateEventTransaction(t, false); }
-
- static TTransaction* GetTransactionFromEvent(const TAETransaction& t);
-
- // private methods
-
- private:
-
- static SInt32 GenerateNewTransactionID();
-
- static void BeginEventTransaction(TAETransaction& t, AETransactionType transactionType, SInt32 transactionID, Boolean transactionAlwaysNeeded = true);
- static void EndEventTransaction(TAETransaction& t, Boolean alwaysDeleteTransaction);
- static void TerminateEventTransaction(TAETransaction& t, Boolean alwaysDeleteTransaction);
-
- // private members
-
- private:
-
- static TTransactionList gTransactionList;
- static long gTransactionID;
- };
-
- #endif
-